访问电脑版页面

导航:老古开发网手机版STM32单片机STM32单片机的USART

STM32单片机串口波特率的计算方法解析

导读:
关键字:
波特率计算,STM32单片机,寄存器,

1. 什么是波特率

不管是什么单片机,在使用串口通信的时候,有一个非常重要的参数:波特率。什么是波特率:波特率就是每秒传送的字节数。双方在传输数据的过程中,波特率一致,这是通讯成功的基本保障。

2. STM32波特率相关的寄存器

STM32单片机设置波特率的寄存器只有一个:USART_BRR寄存器,如下图所示。

STM32单片机串口波特率的计算方法解析

该寄存器的有效位数为16位,前4位用于存放小数部分,后12位用于存放整数部分。将波特率算出来后,数值填入这个波特率就可以了。下面介绍如何计算。

3. 波特率计算方法

STM32的数据手册给出了计算方法,有一个公式,如下图所示:

STM32单片机串口波特率的计算方法解析

在这个公式上,共有三个变量,其中两个我们是知道的,Fck和Tx/Rx波特率这两个是已知的,USARTDIV是未知的。通过该公式的描述可以看出如果使用USART1的话,那Fck就是PCLK2=72MHz,否则就是PCLK1=36MHz,Tx/Rx波特率这个参数是已知的。只需要计算出USARTDIV的值赋值给USART_BRR寄存器就可以了。以115200为例,将公式变形后得到:USARTDIV = 72×1000000/(16×115200) = 39.0625。即将39.0625写入USART_BRR即可。

前文说过,USART_BRR的前4位存放小数部分,后12位存放整数部分。

那小数部分DIV_FracTIon = 0.0625×16 = 1 = 0x01;

那整数部分DIV_ManTIssa = 39 = 0x27;

那USART_BRR = 0X271;

数据手册给我们提供了一张数据表:

STM32单片机串口波特率的计算方法解析

在这张数据表上,已经算出了常用的波特率值,我们可以拿来直接用。但是如果我们想把波特率的计算做成一个传参函数的方式,

如:USART_INIT(uint_t 16 Baud),在调用时只需要写USART_INIT(9600),USART_INIT(115200),那程序该怎么写呢?

4. 程序的实现

下面介绍的是寄存器版的程序。

STM32单片机串口波特率的计算方法解析

程序第一步45行:先计算得到USART_DIV,这个就是前面公式的变形;

程序第二步46行:获得USART_DIV的整数部分;

程序第三步47行:获得USART_DIV的小数部分;

程序第四步48行:将整数部分左移4位,即存入BRR寄存器的后12位;

程序第五步49行:将整数和小数部分合在一起,即前4位和后12位重新组合;

程序第六步50行:将计算出来的数值赋给BRR寄存器。

这样一个将波特率作为形参的函数就完成了。从以上来看的话,波特率的计算好像也不是很难啊。

来源:工程师周亮   作者:lhl545545  2019/8/15 15:30:00
栏目: [ STM32单片机的USART]

相关阅读

STM32 USART串口DMA接收和发送模式

如何采用STM32单片机串口接收数据

STM32F407的UART串口初始化

STM32f103 双串口配置和中断

STM32单片机串口通讯故障排除处理过程

STM32单片机串口的定义及应用方法

STM32F4 USART配置

STM32单片机串口波特率的计算方法解析

基于STM32单片机发送字符串的函数

STM32单片机重映射USART设计

STM32单片机UART发送配置的步骤及方法

如何利用STM32单片机串口发送字符串

如何在STM32串口通信程序中使用printf发送数据

基于STM32单片机的串口使用解析

什么是串口通信?基于STM32的printf打印输出

基于STM32F4单片机USART寄存器控制的设计

基于STM32的串口DMA发送

STM32单片机的Usart2串口的调试方法

基于STM32实现串口的两个分案解析

STM32单片机串口DMA解析